我很早就開始接觸組合語言,但沒有學太久,就沒有再碰了,當初學組合語言的原因,是覺得組合語言是人與機器溝通最直接的方式,因為用電腦的語言直接告訴電腦是最方便的,免去了一堆繁瑣的編譯步驟,這樣不就是最直接的方式嗎?
但是,我後來發現,我錯了,電腦是二進位的思考,可是人類思考可能是億萬以上的位元在思考的,光我們說一個『請』字,或許大家覺得一點都不困難,可是那是因為人類的運算方式已經是非常非常…巨大了,甚至透過數以難計的神經位元在進行運算,從接收外部訊息開始,到處理結束,乃至從口中說出『請』時,中間的流程分解,其實是非常精細且複雜的,絕對不是我們可以想像到的複雜。
換個角度來想,若以電腦的角度來看,電腦是用二進位的思考來想,你要幾億個二進位才能產出一個『請』字? 更何況,還要考量到外部環境不同,還要加以變化,從這個觀點來看,我們要把簡單的人類思考,去拆解甚至打碎到極碎的方式,讓電腦去了解你所寫的指令,這實在太困難了,所以,組合語言就是這樣被我束諸高閣了!
不過,多年以後,或許有點想重拾年輕時的感覺,所以,就試著寫看看吧! 最後,我如果寫錯,請多多包涵~~我盡力就是了!
開始吧~~
我們在開始了解ARM架構時,先要了解ARM最基本的行為模式,就是處理元件(processing element,簡稱PE),處理元件的意思就是去告知在接受訊息之後,該怎麼去處理相關的資訊,簡單的說,就是當你接收到某種訊息時,你的每個神經系統會馬上通知大腦,這個行為該怎麼應對。
這個PE是可以多個存在的,你可以選擇這麼做,也可以選擇不要這樣做,主要還是需要CPU做最後決定,所以ARM的行為模式不一定是會接受PE而執行,就如同我們接受到訊息,大腦也不一定會接受一樣。
接著我們也要了解,當訊息進來時後,有可能是一大坨的進來,資料進來時,就要有一個資料池(Data pool),然後,我們就開始從這個池子裡面去撈出可以用的資訊,下指令來處理這些訊息,也就是初步的篩選,然後,這些可用的訊息會先放在暫存區裡面,然後設定編碼之後,根據演算的方式,哪些編號可以用的,就讓這些資訊傳向CPU。這個過程裡面就有很多種模式,例如:單指令流多資料流(Single Instruction Multiple Data,縮寫:SIMD),這個就是目前ARMv8所使用的指令集的處理模式。不管是32位元或64位元,處理模式大至上就是循著SIMD模式來處理。
維基百科上面有簡單的定義:
單指令流多資料流是一種採用一個控制器來控制多個處理器,同時對一組資料中的每一個分別執行相同的操作從而實現空間上的並列性的技術。 在微處理器中,單指令流多資料流技術則是一個控制器控制多個平行的處理微元,例如Intel的MMX或SSE,以及AMD的3D Now!指令集。